686. 重复叠加字符串匹配

686. 重复叠加字符串匹配

Similar Question

leading to the advanced question

Solution Tips

问题的关键在于, 重复的必要次数是多少?

首先, 可以明确的是, 一定要重复到主串的长度大于子串, 才有可能匹配上. 重复次数记为 r1

然后, 假如子串一定可以匹配上, 那么子串的第一个字符一定是在未重复的主串中存在的. 如果不存在就不可能匹配上.

那么如果存在, 可以子串可以完整匹配到的起始位置也一定是在非重复的主串中的, 所以最多也只需要重复 r1 + 1

确定了重复的次数之后, 剩下的任务就是 kmp 匹配子串了

是否有必要使用 kmp 呢? 因为可以确定子串匹配的起始位置是有限的, 直接截取和子串长度相同的判断一下其实就 ok 了 ?

方案